异常处理的注意事项
注意 ⚠️,必须在更一般的异常捕获之前为比较特殊的异常提供 catch
块。如果 catch
块的顺序有误,应用程序就会编译失败。还要注意可以在 catch
块中抛出异常,方法是使用上一个示例中的方式,或使用下述表达式:
throw;
这个表达式会再次抛出 catch
块处理过的异常。如果以这种方式抛出异常,该异常就不会由当前的 try...catch...finally
块处理,而是由上一级的代码处理(但嵌套结构中的 finally
块仍会执行)。
例如,如果修改 ThrowException()
中的 try...catch...finally
块,如下所示:
try
{
Console.WriteLine("ThrowException(\"nested index\")" +
"try block reached.");
Console.WriteLine("ThrowException(\"index\") called.");
ThrowException("index");
}
catch
{
Console.WriteLine("ThrowException(\"nested index\") general"
+ " catch block reached.");
throw;
}
finally
{
Console.WriteLine("ThrowException(\"nested index\") finally"
+ "block reached.");
}
则首先执行其中的 finally
块,再执行 Main()
中匹配的 catch
块,得到的控制台输出 如图 7-20 所示
。
图 7-20
在这个屏幕截图中,Main()
函数输出了额外的几行,因为这个函数捕获了 System.IndexOutOfRangeException
异常。
🔚